﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DataAccessLayer;
using BusinessLogicLayer;

namespace ChamCong.NhanVien
{

    public partial class ChamCong : BasePage
    {
        int maNV;
        CongBLL cBLL = new CongBLL();
        ThamSoBLL tsBLL = new ThamSoBLL();
        LoaiCongBLL lcBLL = new LoaiCongBLL();
        TangCaBLL tcBLL = new TangCaBLL();
        ShowBangCong show = new ShowBangCong();

        public static int thang;
        public static int nam;
        //DateTime a, b;
        protected void Page_Load(object sender, EventArgs e)
        {
            //LoadYearToDropDownList();
            if (Session["MaNV"] == null)
            {
                var ReturnUrl = Request.RawUrl;

                //Dang nhap roi quay tro lai trang truoc do, cach nay khong thay doi URL
                Response.Write("<script>alert('Vui lòng đăng nhập để truy cập.');window.location.href('Home.aspx');</script>");
                Server.Transfer("../TaiKhoan/DangNhap.aspx?ReturnUrl=" + ReturnUrl);
            }
            else
            {
                //............... //
                maNV = Convert.ToInt32(Session["MaNV"]);
                try
                {
                    cBLL.KiemTraTinhCong(maNV);
                }
                catch { }
                LoadThongTinNV(maNV);
                if (!IsPostBack)
                {
                    txtNam.Text = DateTime.Now.Year.ToString();
                    drThang.SelectedValue = DateTime.Now.Month.ToString();
                    thang = int.Parse(drThang.SelectedValue);
                    nam = int.Parse(txtNam.Text);
                    lbDSCong.Text = show.BangCongSingle(thang, nam, maNV);
                }
                //LoadYearToDropDownList();
            }
        }

        protected void LoadThongTinNV(int _maNV)
        {
            //Convert.ToInt32(Session["MaNV"])
            NhanVienBLL nvBLL = new NhanVienBLL();
            NHANVIEN nv = nvBLL.LayNhanVien(_maNV);
            lbHoTen.Text = nv.HoTen;
            lbGioiTinh.Text = nv.GioiTinh;
            lbMaNV.Text = _maNV.ToString();
            lbNgaySinh.Text = String.Format("{0:dd/MM/yyyy}", nv.NgaySinh);

            //Lay Phong Ban
            //string pb = nvBLL.LayPBTuNV(_maNV);
            lbPhongBan.Text = lbPhongBan.Text + "- " + nvBLL.LayPBTuNV(_maNV) + "</br>";


            //Lay Chuc Vu
            ChucVuBLL cvBLL = new ChucVuBLL();
            List<string> cv = cvBLL.LayCVTuNV(_maNV);
            lbChucVu.Text = "";
            foreach (var i in cv)
            {
                lbChucVu.Text = lbChucVu.Text + "- " + i.ToString() + "</br>";
            }
        }

        protected void btnDen_Click(object sender, EventArgs e)
        {
            //a = DateTime.Now;
            //lbThongBao.Text = DateTime.Now.ToShortTimeString();
            CONG cong = new CONG();
            cong.MaNV = maNV;
            cong.Ngay = DateTime.Now;
            int _kiemTraTonTai = cBLL.KiemTraTonTai(maNV, cong.Ngay);
            if (_kiemTraTonTai == 0)
            {
                cong.GioDen = DateTime.Now;
                cong.TrangThaiChot = 0;
                cBLL.ThemCong(cong);
                sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Info, "Thông báo", "Bạn có mặt lúc : " + string.Format("{0:hh:mm tt}", cong.GioDen));
                //lbThongBao.Text = "Bạn có mặt lúc : " + string.Format("{0:hh:mm tt}", cong.GioDen);
            }
            else if (_kiemTraTonTai == 2)
            {
                //Đã xin phép!
                cong.GioDen = DateTime.Now;
                cong.TrangThaiChot = 0;
                cBLL.SuaCong(cong);
            }
            else
            {
                //lbThongBao.Text = "Lỗi - Giờ Đến đã tồn tại!";
                sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Thông báo", "Giờ Đến đã tồn tại!");
            }
                //lbThongBao.Text = "Lỗi - Giờ Đến đã tồn tại!";
        }

        protected void btnVe_Click(object sender, EventArgs e)
        {
            
            CONG cong = new CONG();
            cong.MaNV = maNV;
            cong.Ngay = DateTime.Now;
            if (cBLL.KiemTraGioVe(cong.Ngay, maNV) == true)
            {
                //lbThongBao.Text = "";
                if (cBLL.KiemTraTonTai(maNV, cong.Ngay) == 0 || cBLL.KiemTraTonTai(maNV, cong.Ngay) == 2)
                {
                    //lbThongBao.Text = "Bạn chưa điểm danh Giờ đến!";
                    sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Thông báo", "Bạn chưa điểm danh Giờ đến!");
                }
                else
                {
                    CONG co = cBLL.LayCong(maNV, cong.Ngay);
                    cong.GioVe = DateTime.Now;

                    TinhThoiGian tg = new TinhThoiGian();
                    DateTime gioden = cBLL.LayTGDen(maNV, cong.Ngay);
                    DateTime giove = Convert.ToDateTime(cong.GioVe);

                    //Kiểm tra trong tổng thời gian, thời gian làm việc là bao nhiêu + tăng ca bao nhiêu
                    var _thoigian = tg.TinhTG(gioden, giove, maNV);
                    double giolam = _thoigian._GioLam;
                    double giotangca = _thoigian._GioTangCa;
                    double hesotc = _thoigian._HeSoTC;
                    //
                    //if(cBLL.KiemTraCong(cong.Ngay,cong.MaNV)==true)
                    double _congphep = cBLL.LaySoCong(cong.Ngay, cong.MaNV);

                    //Thêm vô bảng công
                    if (giolam > 0)
                    {
                        double _socong = TinhCong(giolam);
                        //Công làm việc bằng công làm việc cộng với công xin phép (nếu có)
                        cong.SoCong = _socong + _congphep;
                        cong.MaLoaiCong = lcBLL.LayMaLoaiCong((double)cong.SoCong).ToString();

                        cong.TrangThaiChot = 0;

                        //Sửa vào bảng công
                        cBLL.SuaCong(cong);
                    }

                    //Thêm vào bảng Tăng Ca
                    if (LamTron(giotangca, 1) >= 1)
                    {
                        TANGCA tc = new TANGCA();
                        tc.Ngay = DateTime.Now;
                        tc.MaNV = maNV;
                        tc.TrangThaiChot = 0;
                        tc.ThoiGian = LamTron(giotangca, 1);
                        tc.HeSo = hesotc;
                        tcBLL.Them(tc);
                    }

                    //b = int.Parse(a);
                    //lbThongBao.Text = "Bạn về lúc : " + string.Format("{0:hh:mm tt}", cong.GioVe);
                    sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Info, "Thông báo", "Bạn về lúc : " + string.Format("{0:hh:mm tt}", cong.GioVe));
                    lbDSCong.Text = show.BangCongSingle(thang, nam, maNV);
                    //lbThongBao.Text = d.ToString();

                }

            }
            else
            {
                sbcMsgBox.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Thông báo", "Bạn đã điểm danh giờ về!");
            }
            
        }

        protected double LamTron(double value, int fractionDigits)
        {
            double d = Math.Pow(10, fractionDigits);

            return (Math.Round(value * d) / d);
        }

        protected double TinhCong(double tgLamViec)
        {
            int tgCong = (int.Parse(tsBLL.LayGiaTri("TGCong")));
            if (tgLamViec >= tgCong)
                return 1;
            if (tgLamViec >= (tgCong * 0.75))
                return 0.75;
            if (tgLamViec >= (tgCong * 0.5))
                return 0.5;
            if (tgLamViec >= (tgCong * 0.25))
                return 0.25;
            else
                return 0;
        }

        protected void Xem_Click(object sender, EventArgs e)
        {
            int nam = int.Parse(txtNam.Text);
            int thang = int.Parse(drThang.SelectedValue);
            lbDSCong.Text = show.BangCongSingle(thang, nam, maNV);
        }

    }
}